#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//面试题：不使用临时变量，交换两个变量的值

//int main()
//{ 
//    int a = 10;
//    int b = 20;
//    a = a + b;
//    b = a - b;
//    a = a - b;
//    printf("a = %d, b = %d\n", a, b);
//    //存在风险：运算结果可能会超出int的范围
//
//    return 0;
//}

//int main()
//{
//    int a = 10;
//    int b = 20;
//    a = a ^ b; //a' = a^b
//    b = a ^ b; //b = a'^b = a^b^b = a
//    a = a ^ b; //a = a'^b = a^b^a = b
//    printf("a = %d, b = %d\n", a, b);
//
//    return 0;
//}

//a = 3  b = 5
//
// a^0 = a     101
//             000
//             101
// 
// a^a = 0     101
//             101
//             000
// 
// a^b^a = b     101  110 --> 011  101 --> 110
// a^a^b = b
// 
// 异或是支持交换律的
//

//=================================================

//找出单身狗
//1.暴力去数
//2.异或

//int main()
//{
//    int a[10] = { 1,2,3,4,5,1,2,3,4 };
//    int i = 0;
//    int ret = 0;
//    for (i = 0; i < 10; i++)
//    {
//        ret ^= a[i];
//    }
//    printf("单身狗是：%d\n", ret);
//
//    //原理：a^a = 0
//    //      a^0 = a
//    return 0;
//}

//暴力去数
//int main()
//{
//    int a[10] = { 1,2,3,4,5,1,2,3,4 };
//    int i = 0;
//    int ret = 0;
//    for (i = 0; i < 10; i++)
//    {
//        int j = i + 1;
//        while (j < 10)
//        {
//            if (a[i] == a[j])
//            {
//                break;
//            }
//            j++;
//        }
//        if (j == 10)
//        {
//            ret = a[i];
//            break;
//        }
//    }
//    printf("单身狗是：%d\n", ret);
//    return 0;
//}